function findMaxForm(strs, m, n) {
  // 初始化dp数组，dp[i][j]表示使用i个0和j个1能得到的最大子集长度
  const dp = new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0));

  for (const s of strs) {
    // 计算当前字符串中0和1的数量
    let zeros = 0,
      ones = 0;
    for (const c of s) {
      if (c === "0") {
        zeros++;
      } else {
        ones++;
      }
    }

    // 从后往前更新dp数组，避免重复使用同一字符串
    for (let i = m; i >= zeros; i--) {
      for (let j = n; j >= ones; j--) {
        // 状态转移：选或不选当前字符串，取最大值
        dp[i][j] = Math.max(dp[i][j], dp[i - zeros][j - ones] + 1);
      }
    }
  }

  return dp[m][n];
}
